package io.renren.modules.sys.controller;

import io.renren.common.annotation.SysLog;
import io.renren.common.utils.Constant;
import io.renren.common.utils.R;
import io.renren.modules.sys.entity.SysDeptEntity;
import io.renren.modules.sys.service.SysDeptService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 部门管理
 *
 * @author chenshun
 * @email sunlightcs@gmail.com
 * @date 2017-06-20 15:23:47
 */
@RestController
@RequestMapping("/sys/dept")
public class SysDeptController extends AbstractController {
  @Autowired
  private SysDeptService sysDeptService;

  /**
   * 列表
   */
  @RequestMapping("/list")
  @RequiresPermissions("sys:dept:list")
  public List<SysDeptEntity> list(){
    List<SysDeptEntity> deptList = sysDeptService.queryList(new HashMap<>());
    return deptList;
  }

  /**
   * 选择部门(添加、修改菜单)
   */
  @RequestMapping("/select")
  @RequiresPermissions("sys:dept:select")
  public R select(){
    List<SysDeptEntity> deptList = sysDeptService.queryList(new HashMap<>());

    //添加一级部门
    if (getUserId() == Constant.SUPER_ADMIN) {
      SysDeptEntity root = new SysDeptEntity();
      root.setDeptId(0L);
      root.setName("一级部门");
      root.setParentId(-1L);
      root.setOpen(true);
      deptList.add(root);
    }

    return R.ok().put("deptList", deptList);
  }

  /**
   * 信息
   */
  @RequestMapping("/info/{deptId}")
  @RequiresPermissions("sys:dept:info")
  public R info(@PathVariable("deptId") Long deptId){
    SysDeptEntity dept = sysDeptService.getById(deptId);
    return R.ok().put("dept", dept);
  }

  /**
   * 保存
   */
  @SysLog("新增部门")
  @RequestMapping("/save")
  @RequiresPermissions("sys:dept:save")
  public R save(@RequestBody SysDeptEntity dept){
    boolean isOk = sysDeptService.insert(dept);
    if (!isOk) {
      return R.error("新增失败");
    }
    return R.ok();
  }

  /**
   * 修改
   */
  @SysLog("修改部门")
  @RequestMapping("/update")
  @RequiresPermissions("sys:dept:update")
  public R update(@RequestBody SysDeptEntity dept){
    boolean isOk = sysDeptService.update(dept);
    if (!isOk) {
      return R.error("修改失败");
    }
    return R.ok();
  }

  /**
   * 删除
   */
  @SysLog("删除部门")
  @PostMapping("/delete/{deptId}")
  @RequiresPermissions("sys:dept:delete")
  public R delete(@PathVariable("deptId") long deptId){
    //判断是否有子部门
    List<Long> deptList = sysDeptService.queryDetpIdList(deptId);
    if (deptList.size() > 0) {
      return R.error("请先删除子部门");
    }

    sysDeptService.removeById(deptId);

    return R.ok();
  }

}